export default {

	// 命名空间
	namespaced: true,
	state: {
		// 商品id，商品图片，商品名字，商品数量，商品描述，商品价格
		car: JSON.parse(uni.getStorageSync("car") || "[]"),
		checkedall: false
	},
	// actions:{
	// 	// state：简化后的store
	// 	// value：组件中dispatch携带的第二个参数
	// 	// 当数据是异步方式获取的，有条件执行下一步操作
	// 	test(state,value){
	// 		console.log(state);
	// 		// 提交到mutations
	// 		state.commit("nexttest",value)			
	// 	}
	// },
	// 编辑state属性
	mutations: {
		addtocar(state, value) {
			// 第一种情况，相同商品点击多次“加入购物车”，购物车界面增加该商品购买数量
			//    goods_count ++
			// 第二种情况，不同商品点击一次“加入购物车”，购物车界面分别显示对应的商品，1件
			//    car.push(value)
			// value    在不在  car[]
			//  array.find()  搜索到匹配的第一个元素，并且元素返回
			//  find() 返回值如果是引用类型数据，注意：引用类型数据发生变化影响原数组中是元素
			// 

			const f_res = state.car.find(item => item.goods_id === value.goods_id)
			if (!f_res) {
				// 如果不存在则追加到car
				state.car.push(value)
			} else {
				// 如果存在则增加购买数量
				f_res.goods_count++
			}

			// 存储到本地  key:"value"
			uni.setStorageSync("car", JSON.stringify(state.car))

		},
		// 更改商品数量后实现购物车商品更新
		// 
		updatecargoods(state, item) {
			const res = state.car.find(value => value.goods_id == item.goods_id)
			if (res) {
				res.goods_count = item.goods_count
				// 保存到本地
				uni.setStorageSync("car", JSON.stringify(state.car))
			}
		},
		// 购物车商品中单击滑动删除按钮执行的删除操作
		deletecaritem(state, goods) {
			// id相同的则表示丛car删除掉
			// id不同的被保留
			state.car = state.car.filter(item => item.goods_id !== goods.goods_id)
			// 保存到本次
			uni.setStorageSync("car", JSON.stringify(state.car))
		},

		// 实现全选和反选

		updatecar(state, goodsstate) {
			// 将选中的商品保留
			console.log(goodsstate);
			const checkedgoods = state.car.filter(item => item.goods_state)
			// 检测选中商品
			console.log(checkedgoods);
			// 选中商品的数组长度   ==   car数组长度 更改全选按钮的state
			if (checkedgoods.length == state.car.length) {
				console.log("全选");
				// 更新当前state的属性或者计算属性  checkedall:true|false  mycount组件中全选按钮
				state.checkedall = true
			} else {
				state.checkedall = false
			}

		},

		// 全选按钮 false，商品状态更新
		// 更新购物车中商品全选状态		
		updatecarstate(state, goodsstate) {
			console.log(goodsstate);
			state.car.forEach(item => item.goods_state = goodsstate)
		},


	},


	// 类似computed
	getters: {
		// 商品购买数量total的计算
		// total =  "hello"
		total(state) {
			// return   "hello"
			// console.log(a,b);
			// return state
			// 声明保存商品总数量的变量sum
			let sum = 0
			// 遍历car中的每个元素
			// 商品购买总量 = sum+goods.goods_count+...
			state.car.forEach(goods => sum += goods.goods_count)
			return sum
		},
		// 勾选商品的总数量
		checkedcount(state) {
			return state.car.filter(item => item.goods_state).reduce((total, v) => total += v.goods_count, 0)
		},

		// 商品总价 = 直接获取结果 state
		//           计算得到结果  getters
		// 计算总价
		// const  res =  循环被选中的商品,累加   reduce((sum，item，当前元素下表，当前数组)=>sum += item.goods_count* item.goods_price)
		//  goods_count * goods_price
		// totalprice
		totalprice(state) {
			return state.car.filter(item => item.goods_state)
				.reduce((sum, val) =>
					sum += val.goods_count * 3
					// sum+=20
					, 0)

		}

		// goodsname(){}
	}
}